package org.alis.smallcc.designpatterns.behavior.proxy.dynamicproxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 动态类生成器
 * 
 * @author: luochuan
 * @date: 2020年11月19日 上午11:36:17
 */
public class GenerateHandler implements InvocationHandler {
	private Class<?> clazz;
	public GenerateHandler(Class<?> clazz) {
		this.clazz = clazz;
	}
	

	@SuppressWarnings("unchecked")
	public <T> T bind() {
		return (T) Proxy.newProxyInstance(clazz.getClassLoader(), clazz.getInterfaces(), this);
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		System.out.println("动态代理开始生成" + clazz.getSimpleName());
		Object obj = method.invoke(clazz.getDeclaredConstructor().newInstance(), args);
		System.out.println("动态代理生成" + clazz.getSimpleName() + "完成");
		return obj;
	}

}
